package com.JavaNet.net;

import java.io.*;
import java.net.*;
import java.util.Date;

public class TimeServer {

  public final static int PORT = 37;

  public static void main(String[] args) {

   // The time protocol sets the epoch at 1900,
   // the Date class at 1970. This number
   // converts between them.
   long differenceBetweenEpochs = 2208988800L;

   try (ServerSocket server = new ServerSocket(PORT)) {
     while (true) {
       try (Socket connection = server.accept()) {
         OutputStream out = connection.getOutputStream();
         Date now = new Date();
         long msSince1970 = now.getTime();
         long secondsSince1970 = msSince1970/1000;
         long secondsSince1900 = secondsSince1970
             + differenceBetweenEpochs;
         byte[] time = new byte[4];
         time[0]
             = (byte) ((secondsSince1900 & 0x00000000FF000000L) >> 24);
         time[1]
             = (byte) ((secondsSince1900 & 0x0000000000FF0000L) >> 16);
         time[2]
             = (byte) ((secondsSince1900 & 0x000000000000FF00L) >> 8);
         time[3] = (byte) (secondsSince1900 & 0x00000000000000FFL);
         out.write(time);
         out.flush();
       } catch (IOException ex) {
         System.err.println(ex.getMessage());
       }
     }
   } catch (IOException ex) {
     System.err.println(ex);
   }
  }
}
